import { reactive } from "vue";
import { formRules } from "./rule";

interface FormItemProps {
  /** 广告ID */
  id?: number;
  /** 广告名称 */
  name: string;
  /** 广告位ID */
  positionId: number;
  /** 广告类型 */
  type: number;
  /** 广告标题 */
  title?: string;
  /** 广告描述 */
  description?: string;
  /** 广告图片 */
  imageUrl?: string;
  /** 广告链接 */
  linkUrl?: string;
  /** 广告状态 */
  status: number;
  /** 开始时间 */
  startTime?: string;
  /** 结束时间 */
  endTime?: string;
  /** 排序值 */
  sort: number;
  /** 点击次数 */
  clickCount?: number;
  /** 展示次数 */
  viewCount?: number;
  /** 点击率 */
  clickRate?: number;
  /** 广告主 */
  advertiser?: string;
  /** 投放预算 */
  budget?: number;
  /** 已消费金额 */
  spent?: number;
  /** 备注 */
  remark?: string;
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
}

interface AdPositionProps {
  /** 广告位ID */
  id?: number;
  /** 广告位名称 */
  name: string;
  /** 广告位编码 */
  code: string;
  /** 广告位描述 */
  description?: string;
  /** 广告位类型 */
  type: number;
  /** 广告位尺寸 */
  width?: number;
  height?: number;
  /** 广告位状态 */
  status: number;
  /** 页面位置 */
  pageLocation?: string;
  /** 排序值 */
  sort: number;
  /** 备注 */
  remark?: string;
  /** 创建时间 */
  createTime?: string;
  /** 更新时间 */
  updateTime?: string;
}

interface FormProps {
  formInline: FormItemProps;
}

interface PositionFormProps {
  formInline: AdPositionProps;
}

/** 广告状态枚举 */
enum AdStatus {
  /** 草稿 */
  DRAFT = 0,
  /** 投放中 */
  ACTIVE = 1,
  /** 已暂停 */
  PAUSED = 2,
  /** 已结束 */
  ENDED = 3
}

/** 广告类型枚举 */
enum AdType {
  /** 图片广告 */
  IMAGE = 1,
  /** 文字广告 */
  TEXT = 2,
  /** 视频广告 */
  VIDEO = 3,
  /** 轮播广告 */
  CAROUSEL = 4
}

/** 广告位类型枚举 */
enum AdPositionType {
  /** 横幅广告 */
  BANNER = 1,
  /** 侧边栏广告 */
  SIDEBAR = 2,
  /** 弹窗广告 */
  POPUP = 3,
  /** 浮动广告 */
  FLOATING = 4,
  /** 内容广告 */
  CONTENT = 5
}

/** 广告状态文本映射 */
export const AdStatusText = {
  [AdStatus.DRAFT]: "草稿",
  [AdStatus.ACTIVE]: "投放中",
  [AdStatus.PAUSED]: "已暂停",
  [AdStatus.ENDED]: "已结束"
};

/** 广告类型文本映射 */
export const AdTypeText = {
  [AdType.IMAGE]: "图片广告",
  [AdType.TEXT]: "文字广告",
  [AdType.VIDEO]: "视频广告",
  [AdType.CAROUSEL]: "轮播广告"
};

/** 广告位类型文本映射 */
export const AdPositionTypeText = {
  [AdPositionType.BANNER]: "横幅广告",
  [AdPositionType.SIDEBAR]: "侧边栏广告",
  [AdPositionType.POPUP]: "弹窗广告",
  [AdPositionType.FLOATING]: "浮动广告",
  [AdPositionType.CONTENT]: "内容广告"
};

/** 广告状态选项 */
export const adStatusOptions = [
  { label: "草稿", value: AdStatus.DRAFT },
  { label: "投放中", value: AdStatus.ACTIVE },
  { label: "已暂停", value: AdStatus.PAUSED },
  { label: "已结束", value: AdStatus.ENDED }
];

/** 广告类型选项 */
export const adTypeOptions = [
  { label: "图片广告", value: AdType.IMAGE },
  { label: "文字广告", value: AdType.TEXT },
  { label: "视频广告", value: AdType.VIDEO },
  { label: "轮播广告", value: AdType.CAROUSEL }
];

/** 广告位类型选项 */
export const adPositionTypeOptions = [
  { label: "横幅广告", value: AdPositionType.BANNER },
  { label: "侧边栏广告", value: AdPositionType.SIDEBAR },
  { label: "弹窗广告", value: AdPositionType.POPUP },
  { label: "浮动广告", value: AdPositionType.FLOATING },
  { label: "内容广告", value: AdPositionType.CONTENT }
];

/** 页面位置选项 */
export const pageLocationOptions = [
  { label: "首页", value: "home" },
  { label: "资讯页", value: "news" },
  { label: "赛事页", value: "event" },
  { label: "活动页", value: "activity" },
  { label: "俱乐部页", value: "club" },
  { label: "培训页", value: "training" },
  { label: "用户中心", value: "user" },
  { label: "全站", value: "global" }
];

/** 获取广告状态标签类型 */
export function getAdStatusTagType(status: number): string {
  switch (status) {
    case AdStatus.DRAFT:
      return "info";
    case AdStatus.ACTIVE:
      return "success";
    case AdStatus.PAUSED:
      return "warning";
    case AdStatus.ENDED:
      return "danger";
    default:
      return "";
  }
}

/** 获取广告位状态标签类型 */
export function getPositionStatusTagType(status: number): string {
  switch (status) {
    case 0:
      return "danger";
    case 1:
      return "success";
    default:
      return "";
  }
}

/** 获取广告位名称 */
export function getPositionName(positionId: number, positions: AdPositionProps[]): string {
  const position = positions.find(item => item.id === positionId);
  return position ? position.name : "未知广告位";
}

/** 计算点击率 */
export function calculateClickRate(clickCount: number, viewCount: number): string {
  if (viewCount === 0) return "0.00%";
  return ((clickCount / viewCount) * 100).toFixed(2) + "%";
}

export type { FormItemProps, FormProps, AdPositionProps, PositionFormProps };
export { AdStatus, AdType, AdPositionType };